﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using ProyectoBastanteo.Dominio;
using ProyectoBastanteo.Negocio;
using ProyectoBastanteo.Persistencia;
using Spring.Context;
using Spring.Context.Support;

namespace ProyectoBastanteo.Prueba
{
    [TestFixture]
    public class BastanteoServicePrueba
    {
        IApplicationContext Spring = null;
        IBastanteoService Service = null;
        Bastanteo bastanteoregistrado = null;
        Poderes poderCreado = null;
        Poderes poderinicia = null;
        Cliente clienteCreado = null;
        Cliente clienteinicia = null;
        TipoEmpresa tipoCreado = null;
        Intervencion Interinicia = null;

        [TestFixtureSetUp]
        public void IniciarPruebas()
        {
            Spring = new XmlApplicationContext(
                "assembly://ProyectoBastanteo/ProyectoBastanteo/capaPersistencia.xml",
                "assembly://ProyectoBastanteo/ProyectoBastanteo/capaNegocio.xml",
                "assembly://ProyectoBastanteo/ProyectoBastanteo/capaPresentacion.xml"
                );
            Service = (IBastanteoService)Spring.GetObject("bastanteoService");
            tipoCreado = ((TipoempresaDAO)Spring.GetObject("tipEmpDAO_ADO")).Crear(
                new TipoEmpresa() { Abreviacion = "SAC" });
            clienteinicia = ((ClienteDAO)Spring.GetObject("ClienteDAO_ADO")).Crear(new Cliente()
            {
                rucclie = "25642864",
                razclie = "Donofrio",
                fecini = DateTime.Now,
                tipclie = tipoCreado,
                nroempl = 850            });

            poderinicia = ((PoderesDAO)Spring.GetObject("PoderesDAO_ADO")).Crear(new Poderes()
            {
                codpod = "COCH",
                nompod = "Cobro de Cheque",
                tippod = "Activo",
            });

            Interinicia = ((IntervencionDAO)Spring.GetObject("InterDAO_ADO")).Crear(new Intervencion()
            {
                codclie = clienteinicia,
                grubast = "A",
                codpode = poderinicia,
                gruinte = "C",

            });

            poderCreado=((PoderesDAO)Spring.GetObject("PoderesDAO_ADO")).Obtener("COCH");
            clienteCreado = ((ClienteDAO)Spring.GetObject("ClienteDAO_ADO")).Obtener(1);
        }

        [Test]
        public void T1RegBastanteoDatosInsuf()
        {
            Assert.Catch<DatosInsufException>(delegate
            {
                Service.RegistrarBastanteo(clienteCreado.codclie, null, poderCreado.codpod, "S", 45000, DateTime.Now);
            });
        }

        [Test]
        public void T2RegBastanteoOK()
        {
            Assert.DoesNotThrow(delegate
            {
                bastanteoregistrado = Service.RegistrarBastanteo(clienteCreado.codclie, "A", poderCreado.codpod, "S", 80000, DateTime.Now);
            });
            Assert.IsNotNull(bastanteoregistrado);
            Assert.AreEqual(bastanteoregistrado.codclie.codclie, clienteCreado.codclie);
        }

        [Test]
        public void T3RegBastanteoRepetido()
        {
            Assert.Catch<Exception>(delegate
            {
                Service.RegistrarBastanteo(clienteCreado.codclie,"A",poderCreado.codpod,"S",80000,DateTime.Now);
            });
        }
        [Test]
        public void T4InterRepetidaXBastanteo()
        {
            Assert.Catch<Exception>(delegate
            {
                Service.RegistrarInterv (clienteCreado.codclie, "A", poderCreado.codpod, "C");
            });
        }

        [TestFixtureTearDown]
        
        public void FinalizarPruebas()
        {
            ((BastanteoDAO)Spring.GetObject("BastanteoDAO_ADO")).Eliminar(bastanteoregistrado);
            ((ClienteDAO)Spring.GetObject("ClienteDAO_ADO")).Eliminar(clienteCreado);
            ((PoderesDAO)Spring.GetObject("PoderesDAO_ADO")).Eliminar(poderCreado);
           // ((IntervencionDAO)Spring.GetObject("InterDAO_ADO")).Eliminar(Interinicia);
            Spring.Dispose();
            Spring = null;
        }
    }
}